<?php
/**
 * Implementa��o do padr�o DAO para a classe Fornecedor.
 * Essas fun��es n�o devem ser chamadas diretamente, sendo seu uso feito via a classe Fornecedor.
*/

//if( !function_exists('__autoload') )
//{
//    function __autoload($class_name) {
//    require_once $class_name . '.php';
//    }
//}
require_once('DataAccess.php');
require_once('Fornecedor.php');
class FornecedorDAO
{

      private $database;

      public function __construct()
      {
               $this->database = DataAccess::getConnection();
      }

      /**
      Insere um registro de fornecedor na tabela t_fornecedor.
      @fornecedor - Objeto do tipo Fornecedor com as informa��es que ser�o gravadas no banco de dados
      @return - Retorna TRUE caso a opera��o seja efetuada com sucesso ou FALSE caso contr�rio.
      */
      public function CadastrarFornecedor( $fornecedor )
      {
      		$consulta = $this->database->Fetch("BEGIN");
		
			if ( $consulta )
    		{
    			$cnpjCpf = $fornecedor->cnpjCpf;
               	$nome = $fornecedor->nome;
               	$telefone = $fornecedor->telefone;
               	$telefoneComercial = $fornecedor->telefoneComercial;
               	$fax = $fornecedor->fax;
               	$celular = $fornecedor->celular;
               	$estado = $fornecedor->estado;
               	$cidade = $fornecedor->cidade;
               	$email = $fornecedor->email;
               	$site = $fornecedor->site;
               	$razaoSocial = $fornecedor->razaoSocial;
               	$especificacao = $fornecedor->especificacao;
               
               	$consulta = $this->database->Fetch("INSERT INTO t_fornecedor(CNPJ_CPF, NOME, TELEFONE,FONE_COMERCIAL,FAX ,CELULAR, ESTADO, CIDADE, EMAIL, SITE, RAZAO_SOCIAL)
                                 VALUES ('".$cnpjCpf."', '".$nome."', '".$telefone."','".$telefoneComercial."', '".$fax."','".$celular."', '".$estado."', '".$cidade."', '".$email."',
                                        '".$site."', '".$razaoSocial."')");

               	$fornecedorId = DataAccess::getId();// id do fornecedor que foi inserido agora

                for ($i = count($especificacao); $i > 0; $i--)
                {
                	$consulta = $this->database->Fetch("INSERT INTO t_categoria_fornecedor(T_FORNECEDOR_ID, T_CATEGORIA_ID)
                    				             VALUES ('".$fornecedorId."', '".$especificacao[$i-1]."')");
                }
               	
    			if( $consulta )
            	{
            		$consulta = $this->database->Fetch("COMMIT");
            		return TRUE;
            	}
            	else
            	{
           			$consulta = $this->database->Fetch("ROLLBACK");
            		return FALSE;
            	}
    		}
    		else
    		{
    			$consulta = $this->database->Fetch("ROLLBACK");
            	return FALSE;
    		}
      }

      /**
      Altera um registro de fornecedor na tabela t_fornecedor.
      @fornecedor - Objeto do tipo Fornecedor com as informa��es que ser�o alteradas no banco de dados.
      @return - Retorna TRUE caso a opera��o seja efetuada com sucesso ou FALSE caso contr�rio.
      */
      public function AlterarFornecedor( $fornecedor )
      {
      		$consulta = $this->database->Fetch("BEGIN");
		
			if ( $consulta )
    		{   
      			$cnpjCpf = $fornecedor->cnpjCpf;
               	$nome = $fornecedor->nome;
               	$telefone = $fornecedor->telefone;
               	$telefoneComercial = $fornecedor->telefoneComercial;
               	$fax = $fornecedor->fax;               	
               	$celular = $fornecedor->celular;
               	$estado = $fornecedor->estado;
               	$cidade = $fornecedor->cidade;
               	$email = $fornecedor->email;
               	$site = $fornecedor->site;
               	$razaoSocial = $fornecedor->razaoSocial;
               	$especificacao = $fornecedor->especificacao;

               	$consulta = $this->database->fetch(" UPDATE t_fornecedor SET CNPJ_CPF='".$cnpjCpf."', NOME='".$nome."', TELEFONE='".$telefone."',FONE_COMERCIAL='".$telefoneComercial."',
                                                     FAX='".$fax."',CELULAR='".$celular."', ESTADO='".$estado."', CIDADE='".$cidade."', EMAIL='".$email."',
                                                     SITE='".$site."', RAZAO_SOCIAL='".$razaoSocial."' WHERE ID = '".$fornecedor->id."' ");

               	$fornecedorOriginal = $this->CarregarFornecedor($fornecedor->id);
                  
                for ($i=0; $i < count($fornecedorOriginal->especificacao); $i++)
                	$Original[$i] = $fornecedorOriginal->especificacao[$i][0];
                      
                for ($ind=0; $ind < count($fornecedor->especificacao); $ind++)
                	$Alterado[$ind] = $fornecedor->especificacao[$ind][0];

                $adcionarEspecificacoes = array_diff($Alterado, $Original );
                $deletarEspecificacoes = array_diff($Original, $Alterado);

                $chavesAdcionar = array_keys($adcionarEspecificacoes);
                $chavesDeletar = array_keys($deletarEspecificacoes);
                                  
                if ($adcionarEspecificacoes != null)
                {
                	for ($i=0; $i < count($adcionarEspecificacoes); $i++)
                    	$consulta = $this->database->fetch("INSERT INTO t_categoria_fornecedor(T_FORNECEDOR_ID, T_CATEGORIA_ID)
                                                            VALUES ('".$fornecedor->id."', '".$adcionarEspecificacoes[$chavesAdcionar[$i]]."')");
                }

                if ($deletarEspecificacoes != null)
                {
                	for ($ind=0; $ind < count ($deletarEspecificacoes); $ind++)
                    	$consulta = $this->database->fetch("DELETE FROM t_categoria_fornecedor WHERE T_FORNECEDOR_ID='".$fornecedor->id."'
                                                              AND T_CATEGORIA_ID='".$deletarEspecificacoes[$chavesDeletar[$ind]]."'");
                }
               	    			
                if( $consulta )
            	{
            		$consulta = $this->database->Fetch("COMMIT");
            		return TRUE;
            	}
            	else
            	{
           			$consulta = $this->database->Fetch("ROLLBACK");
            		return FALSE;
            	}
             	
    		}
    		else
    		{
    			$consulta = $this->database->Fetch("ROLLBACK");
            	return FALSE;
    		}
      }

      /**
      Exclui o registro da tabela t_fornecedor de chave-prim�ria $id.
      @id - Chave-prim�ria do fornecedor cadastrado no banco de dados.
      @return - Retorna TRUE caso a opera��o seja efetuada com sucesso ou FALSE caso contr�rio.
      */
      public function RemoverFornecedor( $id )
      {
      		$consulta = $this->database->Fetch("BEGIN");
		
			if ( $consulta )
    		{
      			$consulta = $this->database->Fetch("DELETE FROM t_fornecedor WHERE ID='".$id."'");
               
               	$consulta = $this->database->Fetch("DELETE FROM t_categoria_fornecedor WHERE T_FORNECEDOR_ID='".$id."'");
    			
                if( $consulta )
            	{
            		$consulta = $this->database->Fetch("COMMIT");
            		return TRUE;
            	}
            	else
            	{
           			$consulta = $this->database->Fetch("ROLLBACK");
            		return FALSE;
            	}
             	
    		}
    		else
    		{
    			$consulta = $this->database->Fetch("ROLLBACK");
            	return FALSE;
    		}
      }
      
      /**
      Busca na tabela t_fornecedor pelo registro associado � chave-prim�ria $id.
      @id - Chave-prim�ria do fornecedor cadastrado no banco de dados.
      @return - Retorna um objeto fornecedor com as informa��es encontradas no registro. Caso n�o encontre nenhum registro retorna FALSE.
      */
      public function CarregarFornecedor( $id )
      {

               $consulta = $this->database->Fetch(" SELECT * FROM t_fornecedor WHERE id = '".$id."' ");

               if ( $consulta != FALSE )
               {

                  $rows = $this->database->getRow();

                  $fornecedor = new Fornecedor();

                  $fornecedor->id = $rows[0]['id'];
                  $fornecedor->cnpjCpf = $rows[0]['cnpj_cpf'];
                  $fornecedor->nome = $rows[0]['nome'];
                  $fornecedor->telefone = $rows[0]['telefone'];
                  $fornecedor->telefoneComercial = $rows[0]['fone_comercial'];
                  $fornecedor->fax = $rows[0]['fax'];
                  $fornecedor->celular = $rows[0]['celular'];
                  $fornecedor->estado = $rows[0]['estado'];
                  $fornecedor->cidade = $rows[0]['cidade'];
                  $fornecedor->email = $rows[0]['email'];
                  $fornecedor->site = $rows[0]['site'];
                  $fornecedor->razaoSocial = $rows[0]['razao_social'];

                  $consulta = $this->database->Fetch("SELECT * FROM t_categoria_fornecedor WHERE t_fornecedor_id = '".$fornecedor->id."'");

                  if ( $consulta != FALSE )
                  {
                  	$rows1 = $this->database->getRow();

                    for ($ind = 0; $ind < count($rows1); $ind++ )
                    {
                    	$categoriaId = $rows1[$ind]['t_categoria_id'];

                        $consulta1 = $this->database->Fetch("SELECT * FROM t_categoria WHERE ID = '".$categoriaId."'");
                                  
                        if ($consulta1 != FALSE )
                        {
                        	$rows2 = $this->database->getRow();
                                     
                            $fornecedor->especificacao[$ind][0] = $rows2[0]['id'];
                            $fornecedor->especificacao[$ind][1] = $rows2[0]['nome'];
						}
                     }
                   }

                  return $fornecedor;
               }
               else if( mysql_num_rows( $consulta ) == 0 )
               {
                  return FALSE;
               }
      }
      
	  public function CarregarFornecedores( )
      {
               $consulta = $this->database->Fetch(" SELECT F.*
                                                       FROM t_fornecedor F, t_categoria C, t_categoria_fornecedor CF
                                                       WHERE C.ID = CF.T_CATEGORIA_ID
                                                       AND CF.T_FORNECEDOR_ID = F.ID");

               if ( $consulta != FALSE )
               {

                  $rows = $this->database->getRow();

                  $objetos = array();
                  for( $i = 0; $i < count($rows); $i++ )
                  {
                       $fornecedor = new Fornecedor();

                       $fornecedor->id = $rows[$i]['id'];
                       $fornecedor->cnpjCpf = $rows[$i]['cnpj_cpf'];
                       $fornecedor->nome = $rows[$i]['nome'];
                       $fornecedor->telefone = $rows[$i]['telefone'];
                  	   $fornecedor->telefoneComercial = $rows[$i]['fone_comercial'];
                  	   $fornecedor->fax = $rows[$i]['fax'];                       
                       $fornecedor->celular = $rows[$i]['celular'];
                       $fornecedor->estado = $rows[$i]['estado'];
                       $fornecedor->cidade = $rows[$i]['cidade'];
                       $fornecedor->email = $rows[$i]['email'];
                       $fornecedor->site = $rows[$i]['site'];
                       $fornecedor->razaoSocial = $rows[$i]['razao_social'];

                       $consulta = $this->database->Fetch("SELECT * FROM t_categoria_fornecedor WHERE T_FORNECEDOR_ID = '".$fornecedor->id."'");

                       if ( $consulta != FALSE )
                       {
                       		$rows1 = $this->database->getRow();

                            for ($ind = 0; $ind < count($rows1); $ind++ )
                                 $fornecedor->especificacao[] = $rows1[$ind]['t_categoria_id'];
                       }

                       $objetos[] = $fornecedor;
                  }

                  return $objetos;
               }
               else if( mysql_num_rows( $consulta ) == 0 )
               {
                  return FALSE;
               }
      }


      /**
      Retorna todos os registros da tabela t_fornecedor.
      @return - Retorna um array de objetos do tipo Fornecedor. Caso n�o encontre nenhum registro retorna FALSE.
      */
      public function CarregarFornecedoresPorCategoria( $categoriaId )
      {
               $consulta = $this->database->Fetch(" SELECT F.*
                                                       FROM t_fornecedor F, t_categoria_fornecedor CF
                                                       WHERE CF.T_CATEGORIA_ID = '".$categoriaId."'
                                                       AND CF.T_FORNECEDOR_ID = F.ID");
               
               if ( $consulta != FALSE )
               {

                  $rows = $this->database->getRow();

                  $objetos = array();
                  for( $i = 0; $i < count($rows); $i++ )
                  {
                       $fornecedor = new Fornecedor();
                       
                       $fornecedor->id = $rows[$i]['id'];
                       $fornecedor->cnpjCpf = $rows[$i]['cnpj_cpf'];
                       $fornecedor->nome = $rows[$i]['nome'];
                       $fornecedor->telefone = $rows[$i]['telefone'];
                  	   $fornecedor->telefoneComercial = $rows[$i]['fone_comercial'];
                  	   $fornecedor->fax = $rows[$i]['fax'];                                              
                       $fornecedor->celular = $rows[$i]['celular'];
                       $fornecedor->estado = $rows[$i]['estado'];
                       $fornecedor->cidade = $rows[$i]['cidade'];
                       $fornecedor->email = $rows[$i]['email'];
                       $fornecedor->site = $rows[$i]['site'];
                       $fornecedor->razaoSocial = $rows[$i]['razao_social'];

                       $consulta = $this->database->Fetch("SELECT * FROM t_categoria_fornecedor WHERE T_FORNECEDOR_ID = '".$fornecedor->id."'");

                       if ( $consulta != FALSE )
                       {
                       		$rows1 = $this->database->getRow();

                            for ($ind = 0; $ind < count($rows1); $ind++ )
                                 $fornecedor->especificacao[] = $rows1[$ind]['t_categoria_id'];
                       }

                       $objetos[] = $fornecedor;
                  }

                  return $objetos;
               }
               else if( mysql_num_rows( $consulta ) == 0 )
               {
                  return FALSE;
               }
      }
}
?>
